package org.gvp.manager.repository;

import org.gvp.common.constant.BaseRepository;
import org.gvp.manager.dto.MenuTreeData;
import org.gvp.manager.dto.NavigateMenuData;
import org.gvp.manager.pojo.SecurityUserMenu;
import org.gvp.manager.to.MapperUpdate;

import java.util.List;

/**
 * 用户菜单关系表 数据层接口
 */
public interface SecurityUserMenuRepository extends BaseRepository<SecurityUserMenu> {
    /**
     * 查找全部可用菜单信息,将菜单信息装载为用户菜单树类型
     */
    List<MenuTreeData> searchNavigateMenuTreeData();

    /**
     * 根据用户编号查找用户分配的菜单信息,反回格式为导航菜单数据类型
     * @param userId 用户编号
     */
    List<NavigateMenuData> searchNavigateMenuByUserId(Integer userId);

    /**
     * [用户导航菜单] 根据导航菜单ID查找导航菜单信息
     */
    NavigateMenuData searchNavigateMenuById(Integer menuId);

    /**
     * [用户菜单权限树] 根据菜单的父菜单ID查找菜单树数据列表
     * <li> 查找菜单的子菜单集合 </li>
     * @param parentId 菜单的父菜单ID
     */
    List<MenuTreeData> searchMenuTreeByParentId(Integer parentId);

    /**
     * 根据用户编号获取用户权限菜单树渲染时默认选中的菜单节点key列表
     * @param userId 用户编号
     */
    List<String> searchUserMenuKeys(Integer userId);

    /**
     * 根据用户的ID和用户菜单的KYE集合删除删除用户和菜单关系
     * @param update 更新映射类
     */
    int logicalCancel(MapperUpdate update);

    /**
     * 根据菜单的key列表,查找菜单的id列表
     */
    List<Integer> searchMenuIds(List<String> keys);
    /**
     * 根据用户id和菜单id查找用户菜单关系信息
     */
    SecurityUserMenu searchByUserIdAndRoleId(Integer userId, Integer menuId);
}
